package main

import "fmt"

//defer
/* Go语言中的defer语句会将其后面跟随的语句进行延迟处理。
在defer归属的函数即将返回时，将延迟处理的语句按defer定义的逆序进行执行，
也就是说，先被defer的语句最后被执行，最后被defer的语句，最先被执行。 */
//defer多用于函数结束之前释放资源（文件句柄、数据库连接、socket连接）
func deferDemo() {
	fmt.Println("start")
	//defer 把它后面的语句延迟到函数即将返回的时候再执行
	//一个函数中可以有多个defer语句，
	//多个defer语句按照先进后出（后进先出）的顺序延迟执行
	defer fmt.Println(1)
	defer fmt.Println(2)
	defer fmt.Println(3)
	fmt.Println("end")
}

func main() {
	deferDemo()
}
